同樣的為了方便測試,記得在 Yocto/build/local.conf 當中加上 spidev-test ,為了後續方便測試所使用。
同樣的也可以在初期提供一些簡易的讀寫功能來增加開發速度。
bitbake linux-stm32mp -c menuconfig
bitbake linux-stm32mp
確認 linux /arch/arm64/conf/defconfig 當中有沒有
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_SPIDEV=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_SLAVE=y
CONFIG_SPI_STM32=y
// Connect to 58100
&spi8 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi8_pins_a>;
pinctrl-1 = <&spi8_sleep_pins_a>;
cs-gpios = <&gpioz 6 0>;
status = "okay";
spidev@0 {
compatible = "linux,spidev","rohm,dh2228fv";
reg = <0>; /* CS #0 */
spi-max-frequency = <4000000>;
status = "okay";
};
};
Qa | Output |
---|---|
Qb | Output |
Qc | Output |
Qd | Output |
Qe | Output |
Qf | Output |
Qg | Output |
Qh | Output |
QH’ | Output 串聯到其他的SN74HC |
SRCLR | Input , 用來一次清空所有輸出 , Low 時觸發 |
OE | Output , Low 時觸發,正常應該要保持 low 才會輸出,但變成 high 時 不會輸出任何訊號 |
SER | SRCLK | SRCLR | RCLK | OE | 說明 |
---|---|---|---|---|---|
x | x | x | x | H | Qa-Qh 都是禁用的 |
x | x | x | x | L | Qa-Qh 都是啟用的 |
x | x | L | x | x | 所以的輸出 register 都會清空 |
L | ^ | H | x | x | 當 SRCLK(移位時鐘)上升沿到達時,移位寄存器的第一階段會設置為低電平(0)。其餘的階段會存儲前一階段的數據。 |
H | ^ | H | x | x | First stage of the shift register goes high: 當 SRCLK 上升沿到達時,移位寄存器的第一階段會設置為高電平(1)。其餘的階段會存儲前一階段的數據。 |
x | x | H | ^ | x | Shift-register data is stored in the storage register: 當 SRCLR 為高電平,RCLK(存儲時鐘)上升沿到達時,移位寄存器中的數據會被存儲到存儲寄存器中。 |
x | ^ | H | ^ | x | Data in shift register is stored in the storage register, the data is then shifted through: 當 SRCLK 上升沿到達,RCLK 上升沿到達時,移位寄存器中的數據會被存儲到存儲寄存器中,然後數據會被移位。 |
每當 SPI 的SCK發生上升沿時,數據位會被送到 (透過 MOSI) SER。每個 SCK 會將1 bit 移到Register 當中。
在傳送完所有的數據後,將 RCLK(LATCH2)設為HIGH ,將移位寄存器中的數據鎖到輸出寄存器中。之後就會顯示燈號了
Q0 是 LSB , Q7 是MSB
lsmod | grep spidev
root@stm32mp1:~# ls /dev/spidev*
/dev/spidev0.0
# LED 會亮 不確定位啥 這一路應該是for58100
spidev_test -D /dev/spidev0.0 -s 4000000 -p "\x03\x00\x17" -v
while true; do spidev_test -D /dev/spidev0.0 -s 4000000 -p "\x01" -v; done